package offer2

/**
原题链接:
https://leetcode.cn/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/description/?envType=study-plan-v2&envId=coding-interviews

B站 帅地玩编程
剑指offer 16.数值的整数次方
实现 pow(x,n),即计算x的n次幂函数(即,x的n次方).
不得使用库函数. 同时不需要考虑大数问题.
*/

func myPow(base float64, n int) float64 {

	//1.特殊判断  如果是0次方,直接返回1
	if n == 0 {
		return 1
	} else if n < 0 { // 如果n为负数, 先将x置为倒数, n为-n
		base = 1 / base
		n = -n
	}
	res := 1.0 //2.生命res结果

	//3.快速幂  只要n>0,就继续执行计算
	for n > 0 { //如果n为奇数, res38*base   如果n为偶数,那么x*=base,然后n>>=1
		if n%2 != 0 {
			res *= base
		}
		base *= base
		n >>= 1
	}
	return res
}
